#ifndef GRAFO_H
#define GRAFO_H

#include <vector>
#include <iostream>
#include "lista.h"
#include "ListaRefinada.h"

using namespace std;

class Grafo {
    public:
        Grafo();
        Grafo(const int n, istream &is);
        ~Grafo();

        int cant_nodos() const { return _cant_nodos; }
        int grado(const int nodo) const { return grados[nodo]; }

        int nodo_adyacente(const int nodo, const int pos) const {
                return lista_nodos[nodo][pos];
        }
        vector<int> adyacencias(const int nodo){return lista_nodos[nodo];}
        vector<int> lexBFS();
        vector<int> co_lexBFS();

   		void cargar(const int n, istream &is);

   	  friend ostream& operator<<(ostream& os, const Grafo& g) ;


    private:
        int _cant_nodos;
        vector<int> grados;
        vector< vector<int> > lista_nodos;
};

#endif // GRAFO_H
